package com.mlk.core.util;

import com.mlk.core.constants.Constant;
import com.mlk.rbac.po.SysDept;
import com.mlk.rbac.po.SysUser;
import com.mlk.rbac.vo.User;
import org.apache.shiro.SecurityUtils;
import org.apache.shiro.authc.AuthenticationException;
import org.apache.shiro.session.Session;



/**
 * 用于处理系统之中关于Session使用部分的内容,
 * 依赖于Shiro部分的API内容.
 * @author xulu
 */
public abstract class SessionUtils {
	
	/**
	 * 获取当前用户对应的session信息,如果session之中没有用户信息,就认为用户没有进行过认证操作
	 * @return
	 */
	public static Session getSession() {
		Session session = SecurityUtils.getSubject().getSession();
		if(session.getAttribute(Constant.SESSION_USER) == null) {
			throw new AuthenticationException("用户没有进行认证操作");
		}
		return session;
	}
	
	
	/**
	 * 获取当前的用户
	 * 包括用户的信息,和组织信息
	 * @return
	 */
	public static User getUser() {
		return (User) getSession().getAttribute(Constant.SESSION_USER);
	}
	
	/**
	 * 获取当前的用户
	 * @return
	 */
	public static SysUser getSysUser() {
		return getUser().getSysUser();
	}
	
	/**
	 * 获取当前用户在系统之中所属的部门
	 * @return
	 */
	public static SysDept getDept() {
		return getUser().getSysDept();
	}
	
}
